SSTP

这里列出的消息結構仕様不包括舊仕様的NOTYFY/1.0、SEND/1.1-SEND/1.3、EXECUTE/1.0-EXECUTE/1.2,有興趣考古的朋友可以去最後的外部連結中查找。

NOTYFY/1.1

NOTIFY SSTP/1.1
Sender: さくら
Event: OnMusicPlay
Reference0: 元祖高木ブー伝説
Reference1: 筋肉少女帯
IfGhost: なる,ゆうか
Script: \h\s0‥‥\w8\w8高木ブーだね。 \u\s0‥‥\e
IfGhost: さくら,うにゅう
Script: \h\s0‥‥\w8\w8高木ブーだね。 \u\s0‥‥\w8\w8むう。 \e
Option: nodescript,notranslate
Charset: Shift_JIS

NOTIFY用於通知一般事件。 NOTIFY發送的數據通過SSTP服務器發送SHIORI請求到達SHIORI。 SHIORI會對此事件作出反應。
使用NOTIFY做成的SSTP客戶端,程序員不一定要了解SHIORI反應的性質。不過,如果你學會SHIORI,整個結構可以較容易的明白。

報頭描述

Charset字符編碼 (必須)
Sender發送方 (必須)
Event事件標識符 (必須)
Reference*參數信息
ScriptSHIORI沒有對應的事件時,顯示的腳本
Entry選項
Option設置項
IfGhost對象人格名
HWnd窗口句柄
Locale語言名(SSP擴張)
Marker和SSTP標誌一起顯示的字符串

基本項

Charset
請求主體和基本報頭(非DBCS,只有單字節字符在報頭)只使用ASCII碼。
報頭中需要使用多字節字符的(Sender/Script/Sentence等)(發件人/腳本/句子)可以使用如下的字符集和編碼:

ASCII
Shift_JIS
ISO-2022-JP
EUC-JP
UTF-8

除此之外可以參考字符集

Locale
Charset的擴展,ISO 639 (参考 :Wikipedia)的完整形式指定。省略時為Japanese。~ SSP擴張。

Event
Event是SHIORI使用事件標識符來判斷事件的類型。雖然,沒有具體的命名規則。然而,建議使用簡單而獨特的命名。
Reference* 是用來傳遞有關正確判斷事件的背景資料。例如,將歌的名字和歌手的參數信息給予事件OnMusicPlay。

Sender
Sender是指定SSTP的發送方。

保險反應事件通知

Script 用於SHIORI沒有對應的事件(SHIORI不發生反應),顯示Script報頭定義的腳本。
然而,處於安全原因使用標籤有所限制。

Option

nodescript - 不顯示SSTP標記​​。
notranslate -不轉譯。

當使用nodescript選項時,顯示腳本不帶SSTP標記​​。但只有來自本地機器的請求時,該選項才會有效。當請求是外部的,無論是否使用nodescript選項SSTP標記​​都會顯示。
當使用notranslate選項時,該腳本顯示是不進行任何轉換的。
多選時用逗號分隔。

IfGhost
用於保險反應的一般事件通知。

NOTIFY SSTP/1.1
Sender: カードキャプター
Event: OnRelease
IfGhost: せりこ,まるちい
Script: \0\s[0]封印解除。\e
IfGhost: さくら,ケロ
Script: \0\s[0]汝のあるべき姿に戻れ。\e
Charset: Shift_JIS

以sakura.name,kero.name 形式指定,第一個項目是主體的名稱,第二項是使魔的名稱。該名稱應該完全對應,包括大寫和小寫字符。

IfGhost是用來向一個特定的人格發送優化方案。在這個例子中,如果人格是“せりこ,まるちい”,顯示“封印解除。”。如果人格是“さくら,ケロ”,顯示“汝のあるべき姿に戻れ。”。 如人格都不是時,顯示第一個腳本“封印解除。”。
CROW,ninix-aya 的 IfGhost 人格在現在的人格中沒有時,自動切換人格發言。

Entry
Entry用於選擇的接口。

SEND SSTP/1.2
Sender: カードキャプター
Script: \h\s0どんな感じ? \n\n\q[まあまあ,#temp0]\q[今ひとつ,#temp1]\z
Entry: #temp0,\h\s0ふーん。 \e
Entry: #temp1,\h\s0酒に逃げるなヨ! \e
Charset: Shift_JIS

這個例子顯示兩個選擇。如果您選擇“まあまあ”,服務器顯示“ふーん。",並返回”まあまあ“的返回值。

SSTP/1.1 200 OK[CRLF]
[CRLF]
まあまあ[CRLF]
[CRLF]

入口發送Entry報頭,作為會話的臨時腳本儲存在服務器上。請參閱SakuraScript中"script"和"entry"的關係的相關。臨時腳本會在整個會話期間維持,但是當會話結束所有臨時項目將被銷毀。當權限是和SSTP一樣的危險標籤會被拒絕。
選項要用#開頭
選擇期間服務器和客戶端的進程都會被阻止。因此,“2秒原則”這裡並不適用,決定選擇前服務器不返迴響應。當返回了一個有效的選擇,服務器返回狀態碼“200”和返回值。當發生超時,服務器返回狀態碼“204”。最後,當收到SSTP中斷,服務器返回狀態碼“210”。

可以和IfGhost混合使用

NOTIFY SSTP/1.1
Sender: カードキャプター
Event: OnRelease
IfGhost: さくら,うにゅう
Script: \h\s0さくらだー。 \w8\n\n\j[#mainblock]
IfGhost: せりこ,まるちい
Script: \h\s0せりこだー。 \w8\n\n\j[#mainblock]
Entry: #mainblock,\s7寢言は寢てから言えっ! \w8\u\s0落ち著けっ! \e
Charset: Shift_JIS

\j[#mainblock]為共通對話。

HWnd 用於Direct SSTP通過窗口消息檢查偽春菜的狀態。

SEND SSTP/1.3
Sender: カードキャプター
HWnd: 1024
Script: \h\s0どんな感じ? \n\n\q[まあまあ,#temp0]\q[今ひとつ,#temp1]\z
Entry: #temp0,\m[1025,0,0]\h\s0ふーん。 \m[1025,0,1]\e
Entry: #temp1,\m[1025,1,0]\h\s0酒に逃げるなヨ! \m[1025,1,1]\e
Charset: Shift_JIS

此規範依賴於"Microsoft Windows"。這個例子顯示兩個選擇。如果您選擇“まあまあ”,服務器顯示“ふーん。",並在同一時 間,postmessage(1024,1025,0,0)被執行,結束時postmessage(1024,1025,0,1)被執行。同樣,如果您選 擇“今ひとつ”,postmessage(1024,1025,1,0)被執行,結束時postmessage(1024,1025,1,1)被執行。
因此,客戶端可以知道目前偽春菜所解析的位置。
HWnd報頭的窗口句柄之後將通過"\m"標籤被發送消息。請設置一個有效的窗口過程句​​柄。

Marker
用於執行Script時替換和SSTP標誌一起顯示的字符串。 (恐怕) Option為nodescript時,Marker無效。 SSP 拡張 (1.10.00 Pre6 追加) 。

SEND/1.4

SEND SSTP/1.4
Sender: カードキャプター
IfGhost: さくら,うにゅう
Script: \h\s0さくらだー。 \w8\n\n%j[#mainblock]
IfGhost: せりこ,まるちい
Script: \h\s0せりこだー。 \w8\n\n%j[#mainblock]
IfGhost: さくら,ケロ
Script: \u\s0わいのはモダン焼きにしてや~。 \w8\h\s0はいはい。 \e
Entry: #mainblock,\s7寢言は寢てから言えっ! \w8\u\s0落ち著けっ! \e
Charset: Shift_JIS

SEND請求只是用來發送SakuraScript的。腳本形式的發送數據用於發送腳本,並且多行將作為對話對待。
由於可能會被人格無視,所以推薦使用NOTIFY。
報頭描述

Charset字符編碼 (必須)
Sender發送方 (必須)
Script顯示的腳本(必須)
Entry選項
Option設置項
IfGhost對象人格名
HWnd窗口句柄
ID無限権限実行指示

Owned SSTP

帶有特殊ID的SEND可以実行無限権限的Script,特徵如下:

  • 可以使用所有命令
  • 時間限制無視(無Conflict)
  • SSTP服務器無效也可傳遞
    SEND SSTP/1.4
    ID: bdf45602c68c26e4e8ed3de82225aaba
    Sender: test
    Script: \![vanishbymyself]

EXECUTE/1.3

EXECUTE SSTP/1.3
Sender: サンプルプログラム
Command: GetName
Charset: Shift_JIS

EXECUTE用於執行一個無輸出的通用命令。

報頭描述

Sender發送人的程序名
Command執行的命令

無論是發件人和命令是必需的。如果其中一個沒有定義,服務器返回Bad Request。
Command 報頭描述

GetName獲取角色的名稱EXECUTE/1.0
SetCookie[key,value]設置cookie的值EXECUTE/1.1
GetCookie[key]從cookie獲取值EXECUTE/1.1
GetVersion獲得當前本體版本EXECUTE/1.2
Quiet啟用禁言EXECUTE/1.3
Restore取消禁言EXECUTE/1.3
GetCollision獲取觸碰判定EXECUTE/1.4 (SSP 拡張)
ExtractArchive壓縮文件解凍(SSP 拡張)
GetNames獲取所有角色的名稱(ninix-aya拡張)
CheckQueue隊列殘留的請求数EXECUTE/1.0(ninix-aya拡張)
SetProperty[key,value]服務器變量寫入EXECUTE/1.1(CROW拡張)
GetProperty[key]服務器變量讀出EXECUTE/1.1(CROW拡張)


GetName
當GetName命令發送,服務器返回活動的角色的名稱(sakura.name 或 sakura.name,kero.name) 。客戶端可以知道服務器的名稱。客戶端可以更改句子和每個角色的進程。 (這包括取消。)
如果該命令發送的未實現,服務器返回"Not Implemented"。

GetNames
服務器返回安裝的所有角色的名稱(sakura.name) 。客戶端可以知道服務器的名稱。客戶端可以更改句子和每個角色的進程。 (ninix-aya拡張。)

GetVersion
當GetVersion命令被發送,SSTP服務器返回一個識別版本的字符串。
例如:"inverse" 17.00

GetCollision
發送

EXECUTE SSTP/1.4
Charset: Shift_JIS
Sender: TestSSTP
Command: GetCollision
Reference0: 1
EXECUTE SSTP/1.4
Charset: Shift_JIS
Sender: TestSSTP
Command: GetCollision
DestHWnd: 156480

返回觸碰判定

SSTP/1.0 200 OK
Head: 74,28,218,77
Face: 100,82,196,123
Bust: 98,181,196,226

Reference0為角色ID(sakura=0 kero=1)或DestHWnd的角色窗口指定。省略時為角色ID=0。
詳細參照GetCollision拡張

ExtractArchive
壓縮文件解凍指示。

Reference0壓縮文件名 (必須)
Reference1解凍到文件夾(必須)
Reference2解凍終了時的通知消息 (MSG,WPARAM,LPARAM)

無Ref2時,解凍終了SSTP響應返回。有Ref2時,解凍準備完了SSTP響應返回,解凍終了消息發送。

SetCookie[key,value], GetCookie[key]
用來長時間保持變量。 SSTP的執行此命令實現"Cookie"作用。

當SetCookie命令發送任何參數,該參數被存儲在服務器上並可以通過GetCookie訪問。
要小心,因為只有存儲該參數的客戶端可以檢索存儲參數。
當另一個客戶端嘗試檢索存儲的參數,檢索會失敗。這樣做是出於安全原因,並避免變量名稱衝突。
如果GetCookie參數不存在,服務器將返回"No Content"。 (不為null)

Quiet, Restore
當Quiet命令被發送,SSTP服務器不會根據其自己的意志對話。此命令用途如下:

當需要連續使用SEND時(角色極其依賴客戶端),在其之前使用Quiet命令以防打斷連續使用SEND。

在發送Restore命令發送或等待16秒時,Quiet被釋放。
在現階段,只有在和服務器相同的IP地址的客戶端可以發送Quiet到服務器。

CheckQueue
客戶端送信 SEND SSTP 内,返回隊列殘留的請求数。
主要是SSTP Bottle客戶端用。
ninix-aya 拡張

SetProperty[key,value], GetProperty[key]
SSTP服務器訪問系統和人格的變量。
詳見CROW - テスト項目資料ぽな@ばぐとら/仕様妄想メモ/プロパティシステム
CROW 拡張

COMMUNICATE/1.1

COMMUNICATE SSTP/1.1
Sender: カードキャプター
Sentence: 今日は寒いなー。
Option: substitute
Charset: Shift_JIS

COMMUNICATE/1.1是用來發送消息給“偽AI”(如問題,協議,請求等)。 (需要時)它返回任何反應和回答。這一請求始終假定與其他用戶或另一個“偽AI”溝通。
在目前,這一請求只能用於從本地機器。 (如果這項請求是來自另一台計算機發送,它會被拒絕。)

報頭描述

Sender發送人名
Sentence句子
Option選項

無論是發件人和命令是必需的。如果其中一個沒有定義,服務器返回一個錯誤的請求。
換行代碼是一個回車(CR:字符0x0D)+換行(LF:字符0x0A)。最後,當一個空行被發送,溝通結束,服務器返回一個狀態碼和可能存在的附加數據。
字符代碼為對應的服務器發送的字符。

選項開關描述

substitute - 使魔說的句子內容。

當使用substitute,使魔說句子內容。
因此,一個沒有語言功能的客戶端可以請求對話代理處理使魔的COMMUNICATE請求。

COMMUNICATE/1.2

COMMUNICATE SSTP/1.2
Sender: 雙葉
HWnd: 0
Sentence: \0\s0どうも。 \e
Surface: 0,10
Reference0: N/A
Charset: Shift_JIS

COMMUNICATE/1.2用於兩台服務器之間的通信。這一請求須依賴於SHIORI/2.1。只有SSTP服務器和SHIORI服務器可以使用這一請求。 (如SSP)

請參閱SHIORI/2.1規範

偽春菜返回從SHIORI/2.1到COMMUNICATION/1.2的回答,發送給服務器的請求消息從HWND或Port取得。因此,兩個服務器事實上進行通信。
在目前,這一請求只能用於從本地機器。

附加報頭描述
|Sender|發送人名|

Sentence文章
Option配置
Port接收方(提問人方)回應的端口號
HWnd從接收端(提問人方)回應的HWND窗口句柄
Surface接收端(提問人方)現在的 surface ID、從左、sakura、kero
Reference*接收端(提問人方)設置的任意的追加情報

GIVE/1.1

該請求不推薦使用,請使用其他請求來代替。

GIVE SSTP/1.1
Sender: カードキャプター
Document: こんにちはさくらです。闇の力を秘めし鍵よ真の姿を我の前に示せレリーズ。汝のあるべき姿に戻れクロウカード。
Charset: Shift_JIS

GIVE/1.1是用來給偽春菜發送待處理或作出反應的數據。 報頭描述

Sender - 發送人的程序名
Document - 文件
Songname - 歌曲名稱

發送人和文件或歌名是必需的。如果其中一個沒有定義,服務器返回一個錯誤的請求。
換行代碼是一個回車(CR:字符0x0D)+換行(LF:字符0x0A)。最後,當一個空行被發送,溝通結束,服務器返回一個狀態碼和可能存在的附加數據。

數據源描述

Document - 任何文件
Songname - 歌曲名稱

Document是文件數據。 偽春菜從發送的數據中提取可以理解的話。它將在未來用於談話。要確認偽春菜的資料學習,可看“AI狀態對話框”。
Songname是歌的名字。 偽春菜整理髮送的數據和歌曲的數據庫。如果Songname在數據庫中找到,偽春菜發生找到歌曲的對話。 (請參閱歌曲重載。)請求收到之後,會立即處理。
服務器發送任意的格式代碼(HTML標記等)。

INSTALL/1.0

SSP 拡張

INSTALL SSTP/1.0
Sender: Angeliclayer
Path: C:\temp\misakichi.nar

通常,NAR文件安裝通過文件或URI來DnD。INSTALL SSTP代替用戶DnD,從外部程序來安裝。
詳見SSTP関連の資料 - とらぶる☆ばぐとらっく

SSTP/1.5

SSP 拡張
SSTP/1.5用於IM for SSP,可以對特定人格對話目的使用。

SEND SSTP/1.5
Ghost: えみりぃ
Script: ユニコードっておいしい?\e
Charset: UTF-8
Locale: Japanese
Port: 9821

Ghost,人格指定。沒有指定人格時按本体處理。不是SSP時由默認人格回話。SSP時,本体指定為桌面上的人格。
Port,IM功能使用時,返信端口指定.受信用戶由此發送信息。該項可省略。


外部連結


首頁   編輯 封鎖 差異 備份 上傳檔案 複製 變更名稱 重新載入   新建條目 一覽 搜索 最近的變更   幫助   最近更新的RSS
Last-modified: 2013-05-25 (六) 12:46:02 (3804d)